package jp.gr.procon.proconapp.api;
import com.squareup.okhttp.HttpUrl;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
import java.io.IOException;
import jp.gr.procon.proconapp.ApiConfig;
import timber.log.Timber;
public abstract class BaseApi<T> {
protected static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");
protected static final MediaType MEDIA_TYPE_TEXT_PLAIN = MediaType.parse("text/plain; charset=utf-8");
protected T mResponseObj;
protected String mResponseBodyText;
protected int mResponseStatusCode;
public T getResponseObj() {
return mResponseObj;
}
public int getResponseStatusCode() {
return mResponseStatusCode;
}
protected HttpUrl.Builder getDefaultUrlBuilder() {
return new HttpUrl.Builder()
.scheme(ApiConfig.DEFAULT_SCHEME)
.host(ApiConfig.DEFAULT_HOST)
.addEncodedPathSegment(ApiConfig.DEFAULT_PREFIX_PATH_SEGMENT);
}
protected Request.Builder getDefaultRequestBuilder() {
return new Request.Builder();
}
/** 実際に通信処理を行う */
protected void execute(Request req) {
mResponseObj = null;
mResponseBodyText = null;
mResponseStatusCode = -1;
OkHttpClient client = new OkHttpClient();
ResponseBody body = null;
try {
Response res = client.newCall(req).execute();
mResponseStatusCode = res.code();
body = res.body();
if (isResponseOk(res)) {
mResponseBodyText = body.string();
} else {
Timber.e("execute: failed request code=" + res.code());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (body != null) {
try {
body.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
protected boolean isResponseOk(Response res) {
return res != null && res.isSuccessful() && res.body() != null;
}
public boolean isSuccessful() {
return mResponseObj != null && 200 <= mResponseStatusCode && mResponseStatusCode < 300;
}
}